1
Más allá de las operaciones por elemento: La transición hacia operaciones matriciales por bloques
AI023Lesson 9
00:00

En lecciones anteriores, nos centramos en operaciones por elemento (como una función ReLU básica sobre una matriz). Estas son limitadas por memoria porque la GPU pasa más tiempo moviendo datos desde la HBM hasta los registros que realizando cálculos matemáticos.

1. Por qué GEMM es fundamental

La multiplicación general de matrices (GEMM) tiene una complejidad computacional de $O(N^3)$ mientras solo requiere acceso a $O(N^2)$ de memoria. Esto nos permite ocultar la latencia de memoria detrás de un gran rendimiento aritmético, convirtiéndola en el "latido" de los modelos de lenguaje grandes.

2. Representación de memoria 2D

La memoria física RAM es de 1 dimensión. Para representar un tensor 2D, utilizamos desplazamientos. Un error común en producción es suponer que un tensor es contiguo. Si confundes los desplazamientos de filas y columnas en tus cálculos de punteros, accederás a "datos fantasma" o provocarás violaciones de memoria.

3. Generalización por bloques

Triton generaliza la lógica por elementos al pasar de punteros individuales a bloques de punteros. Al usar tiles 2D (por ejemplo, $16 \times 16$), aprovechamos reutilización de datos en SRAM de alta velocidad, manteniendo los datos "calientes" para operaciones fusionadas como la suma de sesgos o activaciones antes de escribirlos de nuevo en la memoria global.

Distribución lineal 1DDistribución por bloques 2D
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>